package com.tg.paw.common.component;

import com.tg.paw.common.constant.CommonConstant;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import javax.servlet.http.HttpServletRequest;

/**
 * @author Rubble
 * @date 2020/6/13
 */
@Component
public class UserUtil {


    /**
     * Spring并没有注入一个request对象，而是注入了一个代理（proxy）；当Bean中需要使用request对象时，通过该代理获取request对象。
     * 调用request的方法method时，实际上是调用了由objectFactory.getObject()生成的对象的method方法；objectFactory.getObject()生成的对象才是真正的request对象。
     *
     * objectFactory的类型为WebApplicationContextUtils的内部类RequestObjectFactory；
     * 而RequestObjectFactory要获得request对象需要先调用currentRequestAttributes()方法获得RequestAttributes对象，
     * 生成RequestAttributes对象的核心代码在类RequestContextHolder中，生成的RequestAttributes对象是线程局部变量（ThreadLocal），
     * 因此request对象也是线程局部变量；这就保证了request对象的线程安全性。
     *
     * 链接：https://www.jianshu.com/p/579ef18709cf
     */
    private static HttpServletRequest request;

    @Autowired
    public void setRequest(HttpServletRequest request) {
        UserUtil.request = request;
    }

    public static String getLoginUsername(){
        String username = request.getHeader(CommonConstant.Authorization_UserName);
        if(username==null){
            username="";
        }
        return username;
    }
}
